package com.edu.scnu.element;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;

import com.edu.scnu.manager.ElementManager;
import com.edu.scnu.manager.GameElement;
import com.edu.scnu.manager.GameLoad;

/**
 * @说明 玩家子弹类，本类的实体对象是由玩家对象调用和创建
 * @author 14737
 * @子类的开发步骤
 * 	1.继承元素基类，重写show()方法
 *  2.按照需求选择性重写其它方法，例如：move等
 *  3.思考并定义子类特有的属性
 */
public class PlayFile extends ElementObj {

	// private int attack = 1; // 攻击力（现已为基类属性）
	private int moveNum = 6; // 移动速度值

	// 剩下的等自己补充；愿意的话可以扩展出多种子弹：激光，导弹等。（玩家类就需要有子弹类型）

	public PlayFile() {

	}

	// 对创建这个对象的过程进行封装,外界只需要传输必要的约定参数,返回值就是对象实体
	@Override
	public ElementObj createElement(String str) { // 自己定义字符串的规则
		String[] split = str.split(",");
		for (String str1 : split) {
			String[] split2 = str1.split(":"); // 0下标是x，y，f 1下标是值
			switch (split2[0]) {
				case "x":
					this.setX(Integer.parseInt(split2[1]));
					break;
				case "y":
					this.setY(Integer.parseInt(split2[1]));
					break;
				// 通过图片加载器获取子弹图片
				case "n":
					ImageIcon icon2 = GameLoad.imgMap.get(split2[1]);
					this.setW(icon2.getIconWidth());
					this.setH(icon2.getIconHeight());
					this.setIcon(icon2);
					break;
			}
		}
		this.setAttack(1);
		this.setHp(1);
		return this;
	}

	@Override
	public void showElement(Graphics g) {
		g.drawImage(this.getIcon().getImage(),
				this.getX(), this.getY(),
				this.getW(), this.getH(), null);
	}

	@Override
	protected void move(long gameTime) {
		if (this.getY() <= 0) {
			this.setLive(false);
			this.setCanRmove(true);
			return;
		}
		this.setY(this.getY() - this.moveNum);
	}
	/**
	 * 对于子弹来说：1.出边界 2.碰撞 3.玩家放保险
	 * 子弹死亡
	 * 处理方式为，当达到死亡的条件时，只进行修改死亡状态的操作。
	 */

	// public int getAttack() {
	// return attack;
	// }

	// public void setAttack(int attack) {
	// this.attack = attack;
	// }
	@Override
	public void beAttacked(int attack) {
		this.setHp(this.getHp() - attack);
		if (this.getHp() <= 0) {
			super.beAttacked(attack);
		}
	}
}
